package cn.melonlib.cores.jpa.model.bean.adapter;


import cn.melonlib.cores.commons.comp.enums.QueryType;
import cn.melonlib.cores.commons.comp.utils.HibernateQlParamsTool;
import cn.melonlib.cores.jpa.model.bean.Query;
import cn.melonlib.cores.jpa.model.bean.Searcher;
import cn.melonlib.cores.jpa.model.bean.impl.SingleQuery;

import javax.persistence.EntityManager;

public class SingleSearcher<DATA> implements Searcher<DATA, Query> {
    @Override
    public DATA search(Query query, EntityManager entityManager) {
        if(QueryType.JPA.equals(query.getQueryType())){
            javax.persistence.Query q=createSearchQuery(entityManager,query.getEntityClass(),query.getFilter(),query.getOrderBy());
            System.out.println("query:"+q);
            return (DATA)q.getSingleResult();
        }
        javax.persistence.Query q=entityManager.createQuery(query.getContent());
        HibernateQlParamsTool.setQueryParam(q,query.getParams());
        return (DATA)q.getSingleResult();
    }

    @Override
    public Class<? extends Query> registerType() {
        return SingleQuery.class;
    }
}
